<?php

class Produto extends AppModel {
    var $name = 'Produto';

    var $validate = array(
        'nome' => array(
            'nonEmpty' => array(
              'rule' => array('notEmpty'),
              'message' => 'O nome do produto é requerido',
              'allowEmpty' => false
            ),
            'min_length' => array(
      				'rule' => array('maxLength', '100'),
      				'message' => 'Nome deve conter no máximo 100 caracteres'
      			)
        ),
        'ds_produto' => array(
          'nonEmpty' => array(
            'rule' => array('notEmpty'),
            'message' => 'Uma descrição do produto é requerida',
            'allowEmpty' => false
          ),
          'min_length' => array(
            'rule' => array('maxLength', '300'),
            'message' => 'A descrição deve conter no máximo 300 caracteres'
          )
        )
    );

    public $belongsTo = array(
        'Tipo' => array(
            'className' => 'Tipo',
            'foreignKey' => 'tipo_id'
        ),
        'Fornecedor' => array(
            'className' => 'Fornecedor',
            'foreignKey' => 'fornecedor_id'
        )
    );

	  public $hasMany = array(
        'Midia' => array(
            'className' => 'Midia',
        ),
		'Desejo'
      );

    public $hasAndBelongsToMany = array(
        'Cor' => array(
            'className' => 'Cor'
        ),
        'Tamanho' => array(
            'className' => 'Tamanho'
        )
    );


    public function afterFind($results, $primary = false){
      if(isset($results['Produto'])){
        $results['Oferta'] = $this->encontrarOfertas($results);
      } else {
        foreach($results as $key => $value){
          $results[$key]['Oferta'] = $this->encontrarOfertas($results[$key]);
        }
      }

      return $results;
    }

    public function encontrarOfertas($produto){
      if(isset($produto['Produto'])){
        $ofertas = $this->query('SELECT Oferta.* FROM ofertas as Oferta LEFT JOIN ofertas_produtos ON (Oferta.id = ofertas_produtos.oferta_id) WHERE Oferta.dt_inicio <= NOW() AND Oferta.dt_fim >= NOW() AND (Oferta.ic_todos_produtos = 1 OR ofertas_produtos.produto_id = '.$produto['Produto']['id'].')');

        return $ofertas;
      } else {
        return array();
      }
    }

    public function getPrecoFinal($produto, $quantidade){
      if(!isset($produto['Oferta'])){
        $produto['Oferta'] = $this->encontrarOfertas($produto);
      }

      $frete_gratis = false;
      $vl_desconto = 0;
      $pct_desconto = 0;

      foreach($produto['Oferta'] as $oferta){
        if($quantidade >= $oferta['Oferta']['qtd_minima']){
          $total = $produto['Produto']['preco'] * $quantidade;
          if($total >= $oferta['Oferta']['vl_minimo']){
            $vl_desconto += $oferta['Oferta']['vl_desconto'];
            $pct_desconto += $oferta['Oferta']['pct_desconto'];
          }
        }

        $frete_gratis = $oferta['Oferta']['ic_frete_gratis'] || $frete_gratis;
      }
//debug($produto);
      $produto['Produto']['novo_preco'] = $produto['Produto']['preco'] - $vl_desconto;
      $produto['Produto']['novo_preco'] = $produto['Produto']['novo_preco'] - ($produto['Produto']['novo_preco'] * $pct_desconto / 100);
      $produto['Produto']['frete_gratis'] = $frete_gratis;

      return $produto;
    }

    public function getCoresPorProduto($produto){
      $cores = array();
      foreach($produto['Cor'] as $cor){
        $cores[$cor['id']] = $cor['nm_cor'];
      }
      return $cores;
    }

    public function getTamanhoPorProduto($produto){
      $tamanhos = array();
      foreach($produto['Tamanho'] as $tamanho){
        $tamanhos[$tamanho['id']] = $tamanho['nm_tamanho'];
      }
      return $tamanhos;
    }

    public function getCoresPorBusca($busca){
      return $this->Cor->find('list', array(
          'fields' => array('Cor.id', 'Cor.nm_cor'),
          'joins' => array(
            'LEFT JOIN cores_produtos as CP ON (Cor.id = CP.cor_id)',
            'LEFT JOIN produtos as Produto ON (Produto.id = CP.produto_id)'
          ),
          'conditions' => array('Produto.nome LIKE "%'.$busca.'%"')
        )
      );
    }

    public function getTamanhosPorBusca($busca){
      return $this->Tamanho->find('list', array(
          'fields' => array('Tamanho.id', 'Tamanho.nm_tamanho'),
          'joins' => array(
            'LEFT JOIN produtos_tamanhos as PT ON (Tamanho.id = PT.tamanho_id)',
            'LEFT JOIN produtos as Produto ON (Produto.id = PT.produto_id)'
          ),
          'conditions' => array('Produto.nome LIKE "%'.$busca.'%"')
        )
      );
    }

	public function getCores($conditions = null){
      return $this->Cor->find('list', array(
          'fields' => array('Cor.id', 'Cor.nm_cor'),
          'joins' => array(
            'RIGHT JOIN cores_produtos as CP ON (Cor.id = CP.cor_id)',
            'LEFT JOIN produtos as Produto ON (Produto.id = CP.produto_id)',
			'LEFT JOIN tipos as Tipo ON (Produto.tipo_id = Tipo.id)'
          ),
          'conditions' => $conditions
        )
      );
    }

	public function getTamanhos($conditions = null){
      return $this->Tamanho->find('list', array(
          'fields' => array('Tamanho.id', 'Tamanho.nm_tamanho'),
          'joins' => array(
            'RIGHT JOIN produtos_tamanhos as PT ON (Tamanho.id = PT.tamanho_id)',
            'LEFT JOIN produtos as Produto ON (Produto.id = PT.produto_id)',
			'LEFT JOIN tipos as Tipo ON (Produto.tipo_id = Tipo.id)'
          ),
          'conditions' => $conditions
        )
      );
    }

    public function getEmOferta(){
      return $this->query('SELECT Produto.*, Oferta.*, Midia.nome as nm_midia FROM ofertas as Oferta LEFT JOIN ofertas_produtos AS op ON (Oferta.id = op.oferta_id) LEFT JOIN produtos as Produto ON(op.produto_id = Produto.id) LEFT JOIN midias as Midia ON (Produto.id = Midia.produto_id AND Midia.ic_capa = 1) WHERE op.produto_id is not null AND Oferta.dt_inicio <= NOW() AND Oferta.dt_fim >= NOW() GROUP BY Produto.id');
    }

    public function getNovos(){
      return $this->query('SELECT Produto.id, Produto.nome, Produto.preco, Produto.created, Midia.nome as nm_midia FROM produtos as Produto LEFT JOIN midias as Midia ON(Produto.id = Midia.produto_id AND Midia.ic_capa = 1) WHERE Produto.qtd_estoque > 0 ORDER BY Produto.created DESC LIMIT 5');
    }

    public function getMaisVistos(){
      return $this->query('SELECT Produto.id, Produto.nome, Produto.preco, Produto.created, Midia.nome as nm_midia FROM produtos as Produto LEFT JOIN midias as Midia ON(Produto.id = Midia.produto_id AND Midia.ic_capa = 1) WHERE Produto.qtd_estoque > 0 ORDER BY Produto.views DESC LIMIT 5');
    }

    public function updateViews($id){
      $this->query('UPDATE produtos SET views = views + 1 WHERE produtos.id = '.$id);
    }

    public function getProdutosRelacionados($produto_id){
      return $this->query('SELECT Produto.id, Produto.nome, Produto.preco, Produto.created, Midia.nome as nm_midia FROM produtos as Produto LEFT JOIN midias as Midia ON(Produto.id = Midia.produto_id AND Midia.ic_capa = 1) WHERE Produto.qtd_estoque > 0 AND Produto.id IN (SELECT produto_id from compra_detalhes where compra_id in (select compra_id from compra_detalhes where produto_id = '.$produto_id.') AND produto_id != '.$produto_id.' GROUP BY produto_id) LIMIT 5');
    }
}

?>
